package com.zf.springdoc.config;

/**
 * 线程内保存当前登录用户 ID 的上下文工具类。
 * 在 Spring MVC 拦截器里 set，在 Controller / Service / DAO 里 get，请求结束后 remove。
 */
public final class UserContext {

    /** 使用 ThreadLocal 保证每个线程独立 */
    private static final ThreadLocal<Long> USER_HOLDER = new ThreadLocal<>();

    private UserContext() {
        // 禁止实例化
    }

    /** 保存用户 ID（在拦截器里调用） */
    public static void setUserId(Long userId) {
        USER_HOLDER.set(userId);
    }

    /** 取出用户 ID（在业务代码里调用） */
    public static Long getUserId() {
        return USER_HOLDER.get();
    }

    /** 请求结束后清理，防止内存泄漏（在拦截器 afterCompletion 里调用） */
    public static void clear() {
        USER_HOLDER.remove();
    }
}